import axios from 'axios'
import Vue from 'vue'
// 创建axios实例
const service = axios.create({
    baseURL: "http://127.0.0.1:8081", // api 的 base_url
    timeout: 5000 // 请求超时时间
})

// response 拦截器
service.interceptors.response.use(
    response => {
        const result = response.data;
        if (result.hasOwnProperty('code') && result.hasOwnProperty('data')) {
            if (result.code === '0') {
                return result.data;
            } else {
                Vue.prototype.$Message.error(result.message);
                return Promise.reject(result.message)
            }
        } else {
            return result;
        }
    },
    error => {
        // 兼容blob下载出错json提示
        if (error.response.data instanceof Blob && error.response.data.type.toLowerCase().indexOf('json') !== -1) {
            const reader = new FileReader()
            reader.readAsText(error.response.data, 'utf-8')
            reader.onload = function (e) {
                const errorMsg = JSON.parse(reader.result).message
                Vue.prototype.$Message.error(errorMsg);
            }
        } else {
            if (error.response) {
                const errorMessage = error.response.data === null ? '系统内部异常，请联系网站管理员' : error.response.data.message
                if (error.toString().indexOf('Error: timeout') !== -1) {
                    this.$Message.error('网络请求超时');
                    Vue.prototype.$Message.reject(error)
                }
                switch (error.response.status) {
                    case 404:
                        Vue.prototype.$Message.error('很抱歉，资源未找到');
                        break
                    case 403:
                        Vue.prototype.$Message.error('资源不可访问');
                        break
                    case 401:
                        Vue.prototype.$Message.error('登录超时,或未登录系统');
                        break
                    default:
                        Vue.prototype.$Message.error('服务器异常');
                        break
                }
            }
        }
        return Promise.reject(error)
    }
)


export default service
